DOC 1.1 -- UTILS directory documentation

NOTE!  This is a plain ASCII text file containing multiple
documents. You may find it most convenient to view or print this file
by running the DOC.EXE program (supplied on this disk) on your PC.
This is the first Goodies Disk to do it this way.  Hope you like it.

:GD9
:Utilities
:-jkh-
@@BEAN11     -G
(Comp.sys.hp48)
Item: 2147 by bawa@eecs.nwu.edu [Sanjiv Bawa]
Subj: The Bean Counter Ver 1.1
Date: 09 Oct 1993

 The Bean Counter 
                       Version 1.1
                   (C) 1993 Sanjiv Bawa
                    bawa@eecs.nwu.edu

GX GX GX GX GX Version ONLY.

This is a NEW VERSION of THE BEAN COUNTER.

Finally !! Here is a post of The Bean Counter - a money
manager program. This is version 1.1. If you want to
track where your money is going this is what you want to
use. Following is a description of the features of this
program.

Have fun !

Noncommercial distribution allowed, provided that this
copyright message is preserved, and any modified versions
are clearly marked as such.

THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE.


VERSION 1.1 SPECIFIC COMMENTS

1. Fixed a bug that caused the program to crash when
   expense types were being changed.

2. Instead of - signs showing a credit in the statements
   a + sign is used. This is more intuitive. A C or CR is
   normally used but a C is not as visible in the
   smallest font mode as a +.

3. Separated TRANSACTIONS into INCOME and EXPENSES. There
   are now separate INCOME TYPES which can be created and
   modified using the MODIFY EXPENSE TYPES and MODIFY
   INCOME TYPES in the main menu.

The program will now create new two new files in your
BEAN directory when you first run it. They are TYPES and
INTYPES and hold information about the EXPENSE and INCOME
TYPES.

The filename of the version is BEAN11.LIB

The file formats are the same as version 1.0


VERSION 1.0 release documentation (unmodified)

After looking through ftp sites everywhere for a program
that helps manage ones money (an "Expense Manager" I
believe is what they are called) I decided to write a
program to help me keep track of my expenses.

It turned out to be quite a reasonably polished program
so, happily, I am going to release it to the rest of the
world - if, of course, anybody wants it .....

WHO WOULD FIND IT USEFUL ?

If you are a normal person who does not have a gazillion
bucks, you will find the program quite useful in keeping
track of all your money. Version 1.0 of this program does
slightly more than a normal personal organizer. 2.0 will
probably do way more (provided there is any kind of
interest in the program).

FEATURES:

This program is capable of handling multiple accounts
(limited only by memory). They can be of two types,
Credit and Checking. The Credit account type is designed
for transactions done with credit cards. The Checking
account type, on the other hand, can be used for
checking, savings and cash accounts. You can open and
close accounts at will.

The program allows you to enter simple transactions (Say,
you spent money on clothes, or deposited a paycheck). It
also allows you to transfer money between accounts (Say
you got a cash advance from your VISA and deposited it in
your checking account). Each transaction has a date,
Expense type (explained later), Amount and Remarks
attached to it.

The program allows you to create several different
EXPENSE TYPES, so you can easily categorize your
expenses, to figure out exactly where your money is
going.

The program also allows you to archive old transactions,
so that thousands of old transactions do not slow down
the program. The number of transactions that you keep is
configurable (can be different for each account).

It creates mini statements that you can look at any time.
You can view 7 transactions at a time (limited by size of
screen), complete with current balances.



This is a GX version. It will NOT work on an SX. It will
NOT crash your SX, however, since it has been written in
usr RPL.

SETUP
If you are running the program for the first time SETUP
and BEAN do the same thing. If you have old files SETUP
will delete them. To run the program you must have at
least ONE account and the program really will not let you
do anything unless you create one. Choose CREATE from the
first menu that you see, which will be ACCOUNT
MANAGEMENT. Then, before you edit anything, read the
following, especially the paragraph subtitled "CREATING
AN ACCOUNT". (The form is a little tricky because the
people at HP simply ignored every piece of mail that I
sent them, so I could not get a hold of the full format
of the INFORM command)

HOW TO USE THIS PROGRAM
This program uses the menu systems that are new to the
GX. It makes the program a lot easier to use. The main
menu (you will not see it when you run the program for
the very first time) has the following entries,
TRANSACTION, TRANSFER, ACCOUNTS, EXPENSE TYPES, ARCHIVE,
STATEMENT, QUIT. The paragraphs below will explain each
option.

BASIC PREMISE OF ACCOUNTING
When money changes hands, a TRANSACTION happens. This
transaction always happens between two ACCOUNTS. One
account received money the other loses it. Generally, you
only keep track of accounts that you own. So, when you
spend money, say by using your VISA to buy a pizza you
only care about what happens to your VISA account. In
this case, the balance goes up and you suddenly owe VISA
more money.

ORGANIZING THIS PROGRAM
Assuming you want to keep track of all your expenses
etc., you want to create several accounts. Most people
will get away with just creating accounts in the program
named after their bank accounts and credit cards and one
or two CASH accounts. Every time you spend money, use a
credit card, cash a check, or get money from an ATM etc.
you should record it (assuming you want to keep track of
things). You can do this by using the TRANSACTION and
TRANSFER options. Read on to find out how ....


ACCOUNTS (Create, Modify, Close and Reopen)
Creating an account is the FIRST thing you have to do. It
is just a little bit tricky, but if you read the
instructions, you should have no problems.

     When you choose the Create Accounts, or Modify
     Accounts option, you will see a screen with 7 items.
     NAME, TYPE, DATE, BALANCE, ARCH ON, KEEP MTHS, OPEN.
     There is a default for all except NAME. You have to
     enter a NAME.

     NAME is the name of the account. Example VISA, AMEX,
     BANKONE, CASH etc.

     TYPE: There are two types of accounts, credit and
     checking. Basically, when you look at your statement
     for the account and see a balance; if you owe that
     balance it is a credit account (such is the case for
     credit cards), and if you have that balance is a
     checking type account (which is the case for
     checking, savings and CASH accounts). To select a
     checking type account enter "-" (the default) or
     enter "+" for a credit type account.

     DATE is the first date that you are going to ever
     going to enter a transaction for. It does not have
     to be the date you opened the account, just the very
     first day, that you want to record in your GX. See
     BALANCE

     BALANCE is the starting balance on the DATE that you
     just entered (see above). The final balance will be
     computed using this starting BALANCE and the
     transactions that you enter.

     ARCH ON: When you run ARCHIVE it will attempt to
     archive transactions so that the very first
     transaction left in the account is the day *after*
     ARCH ON. Obviously, if your bank always sends to
     statements at the end of the month you should enter
     31. If, say, statements are from the 16th of the
     previous month to the 15th of this month, enter 15.
     This helps keeping things in sync, so you do not
     have haphazard beginning dates when you ARCHIVE
     transactions.

     KEEP MTHS is the numbers of months that it will keep
     online when you do an ARCHIVE. The higher this
     number, the slower things will get, since you will
     have too many transactions in the list. Too small a
     number will mean that you do not have enough
     transactions online.

     OPEN? is if this account is open for business. If
     you creating it, it probably is. No transactions are
     allowed on closed accounts.

CLOSE closes an open account. NOTHING is deleted
REOPEN reopens a closed account



TRANSACTION
     Self explanatory. Every time you spend money,
     receive a paycheck etc., you should select this
     option. See TRANSFER. Remember to use NEGATIVE
     numbers for any money that you receive. This may be
     confusing at first, but if you think about it, it
     makes sense. If a positive number is money outflow,
     a negative number would be inflow. Thus, your
     paycheck would, for example, be recorded as -800.
     Future versions, will fix this.



TRANSFER
     Do not use the TRANSACTION option if you transfer
     money between accounts. Say if you get a cash
     advance from you VISA and deposit it in your
     checking account, except for bank fees, you have not
     spent any money.



EXPENSE TYPES
     To categorize your transactions you can create,
     modify or delete EXPENSE TYPES. There are a few
     created for you already. You can make more. Try not
     to delete any. I have not really put in the code to
     delete a type, so it just creates a space in the
     menu.....



ARCHIVE
     Puts old transactions in an archive. The archive
     filename is the account filename + .CL. The starting
     balance is adjusted properly. Note, that in this
     version, nothing can be done with this archive file.



STATEMENT
     Creates a statement, with balance for you to see. It
     starts off the very bottom, i.e. the very last
     transaction to happen in displayed at the very
     bottom. Use the up arrow and down arrow to go up and
     down. Any other key get you out. Yes, it is slow,
     but Version 2.0 will have this part written in sys
     RPL so it will be faster.



**Special Instructions**
This is not a 100% perfect program. It is on the slowish
side with obvious defects in the ACCOUNT create/modify
part. You can get it to crash by doing things that should
not be done, i.e creating two accounts with the same
name, creating an account with the name ACCTS etc. There
will be many more checks etc. in the next version, and it
will be faster with more functionality.

If you have any comments on the program, its
functionality or its documentation, please let me know at
bawa@eecs.nwu.edu. Please put "The Bean Counter" in the
subject line.

Thank you for your support.
@CD21
Change Directory
Version 2.1, January 1993
by Dan Kirkland

CD (Change Directory) is a library that allows you to
view, change, create, and destroy directories graphicly.

INSTALLING THE CD LIBRARY

Transfer the CD library to your HP48.
Put the library on the stack.

Enter the port number were you want to store the CD
library and press STO .

Turn the HP48 off and back on again to allow the CD
library to attach.

Purge the variable with the original copy of the CD
library.

REMOVING THE CD LIBRARY

Go to the HOME directory.
Enter 1122 and execute DETACH .
Enter 1122 tagged with the port number which the CD
library is stored and execute PURGE. ( or :&:1122 PURGE)

USING THE CD LIBRARY

Go to the library menu and press the CD menu key.
This will give you a menu with following keys.

CD - The main program.
ABOUT.CD - Title screen.

You can run CD by entering this menu and pressing the CD
key or by just entering the letters CD.

The first time you run CD it will scan for all your
directories and store them in a variable in your HOME
directory called 'CD.Data'. 'CD.Data' is used for faster
drawing of the tree.

If you create or destroy any directories outside of the
CD program, you will need to SCAN the directories again
to have an accurate picture of your directories.

CD MENU KEYS

HOME  - Highlights the HOME directory.
SCAN  - Scans the directories and updates 'CD.Data'.
CRDIR - Create a subdirectory in the highlighted
        directory.
PGDIR - Purge the highlighted subdirectory.

OTHER ACTIVE KEYS

THE ARROW KEYS - Move highlight from one directory to
                 another.
ENTER          - Exit CD into highlighted directory.
ON (ATTN)      - Exit CD without changing directory.
+/-            - Toggle menu on/off (menu keys stay
                 active).

Dan Kirkland

Email:   kirkland@ee.utah.edu
@@CGENERIC   SG
CGENERIC - used by FONEMAN.
@@COMPRESS   SG
(Comp.sys.hp48)
Item: 2923 by ftg0673@tamsun.tamu.edu [Rick Grevelle]
Subj: High Performance Data Compression
Date: 08 Dec 1993

[Note: This is an updated version of the RF (Redundancy
 Fighter) programs which have been on this and on
 previous Goodies Disks.  Although the compression logic
 is the same as RF's, the memory handling is much safer,
 and the decompression is much faster.  Also, it creates
 Library Objects instead of strings.  Which should you
 use: RF, or COMPRESS?  Try both, and decide which you
 like better.  -jkh-]

These two routines are the first stage of a multipass
high performance data compression scheme.  The run length
oriented algorithm is a variation of the one originally
implemented by Lutz Vieweg.  For the compression routine
the final 'BYTES COMPRESSED' readout pertains to the
actual number of bytes saved.  I am interested in
expanding the base of beta testers on a project nearing
completion at this time, and as a consequence I shall be
prereleasing segments of the main library but without
most of their documents, and lacking full functionality.
For example, the multiple pass feature has been disabled
here.  I would be indebted to any individual who might
discover, and report, any bugs to me.  Particularly if
you could explain to me how I could recreate the
anomalies.  Future versions are being discussed and may
even be self evaluating in order to obtain maximum
compression for the varying data structures within the
48's environment.

Rick Grevelle
(409) 774-1169
ftg0673@tamsun.tamu.edu
@@CROLDX     SG
CROLDX - used by FONEMAN.
@@DBASE      -G
(Comp.sys.hp48)
Item: 1387 by _mtodd@hpcvbbs.external.hp.com
      [Matthew Todd Eckrich]
Subj: HP48GX Database Application

BYTES:   # CE11h, 4654.5
Date:    24 February 1993

   The following are prominent features of this database
   application for an HP48G/GX:
 
   * Written completely in System RPL.
 
   * Allows multiple databases.
 
   * Allows browsing titles using the internal browser. 
 
   * Entries exceeding the display boundaries can be
   scrolled.
 
   * Repeat key features.
 
   * All entries are sorted.
   
   * Databases accessible from any directory.
 
   
   Each database consists of a number of records. Each
record consists of a set number of fields determined when
the database is created. The physical structure of each
database is a list of list(s) of strings(s). Linefeeds
are allowed in strings. The databases are stored in the
hidden directory ( #640BEh SYSEVAL to enter -- caution:
careless use of SYSEVAL can cause a memory loss).
 
   To use, install the library and execute XQDB. It will
first prompt to define a new database.
   
   When the browser is active to view the records in a
database the keyboard is defined as follows:
 
11.1  DB        Browses databases and brings up database
                menu
 
12.1  FIND->    Brings up menu for search of next
                record(s). Note that a key search matches
                strings in just the first field of each
                record.
 
13.1  FLD->     Browses records by the next field.
 
14.1  ADD       Adds record.
 
15.1  DEL       Deletes record.

16.1  EDIT      Edits record.
 
25.1  UPARROW   Advances highlight up one record.
25.2            Advances highlight up one page.
                (left-shifted UPARROW)

25.3            Advances highlight to top record.
                (right-shifted UPARROW)
 
35.1 DOWNARROW  Advances highlight down one record
35.2            Advances highlight down one page.
                (left-shifted DOWNARROW)

35.3            Advances highlight to last record.
                (right-shifted DOWNARROW)
 
51.1 ENTER      Views currently highlighted record in
                full-screen mode, redefining the keyboard
                as explained in next section.
 
61.1 ALPHA      Allows search of records by first letter
                of current field.

                Thus, ALHPA N advances to first record
                beginning with the letter N.
 
91.1 CANCEL     Exits.
   
   
   When a record is being viewed in the full screen mode,
the keyboard is defined as follows:
 
11.1  FIND->    Brings up menu for search of next
                record(s). Note that a KEY search matches
                strings in just the first field of each
                record.
 
12.1  STK->     Places fields of current record on stack.
                Fields can then be entered into other
                records when editing by using the STK
                key.

13.1  COPY      Creates duplicate of current record.

14.1  ADD       Adds record.

15.1  DEL       Deletes record.

16.1  EDIT      Edits record.
 
 
25.1  UPARROW   Advances to previous record.

25.3            Advances to top record. (right-shifted
                UPARROW)
 
35.1 DOWNARROW  Advances to next record.
35.3            Advances to last record. (right-shifted
                DOWNARROW)
 
51.1 ENTER      Starts Browser mode highlighting the
                current record.
 
91.1 CANCEL     Exits.
 
 
        If the current record exceeds the display
        boundaries, (with repeat key feature)
 
        24.1 VAR        Scrolls display up
 
        26.1 NXT        Scrolls display down
 
        34.1 LEFTARROW  Scrolls display left
 
        36.1 RIGHTARROW Scrolls display right.
@@FALSECLR   SG
From: Jeoff Krontz  <jeoff@tamsun.tamu.edu>
Subject: FalseClear Shell v2.0

This is Rick Grevelle's famous falseclear routine put
into a shell. It enables you to use your calculator just
like normal until you want to press [ON]-[A]-[F]. Once
you press thsee keys, the memory will be falsely cleared
and your directory will appear empty. But the routine is
still in memory and will catch the next [ON]-[A]-[F] and
will continue to do so until you do an [ON]-[C].

I have also made the home directory clear (not really)
upon falsely clearing the memory. This is so that a
sneaky professor doesn't clear your memory and then press
[VAR] so that he/she sees that it did not really clear.

Press [ON]-[B] to instantly see your directory reappear.
Note that you may still use your calc like normal when
the directory is cleared. You may even run programs by
typing their names in on the command line. They are
simply "hidden". To see how this is done take a look at
the source code that I have included.

There are a few things to take note of: this program is
not perfect.

This program is limited in what it can do by the way HP
does its key handling.

1. The [ON]-[A]-[F] trap will only work when you are on
   the command line or when the stack is visible. (It
   will not work in the interactive stack)

2. Therefore, it will not work while running another
   program or using one of the multi-line (5,6,7) stack
   programs out there.

3. If you type keys real fast and then hit [ON]-[A]-[F]
   then your memory will be cleared. You are actually
   hitting [ON]-[A]-[F] while the key buffer is being
   handled and not while my program is trapping your
   keypresses.

4. To do an [ON]-[C] or [ON]-[Anything], press the key
   first, and then [ON]. Note that this will not work
   with [ON]-[A]-[F].  Also note that [ON]-[C],
   [ON]-[D], and [ON]-[Space] will abort FalseClear.

This is a complete re-write of the version Rick posted
three weeks ago which had some shortcomings. This
version will work on both the SX and GX (or S,G).

I have also included the source code so that people can
see how it's all done. I have commented the machine
language part heavily for those unfamiliar with ML key
handling.
@@FONEMAN    SG
   From: "Jeoffrey M. Krontz" <jmk2088@tamsun.tamu.edu>
Subject: Fone Manager v1.0
   Date: Tue, 5 Oct 93

The Fone Manager v1.0

I wrote this program over a period of 6 months,
constantly improving it and making it the best phone
number and address manager ever. It is definitely the
fastest program of its type that I have ever seen, and I
looked at every one I could find to get ideas from them
and to learn their weaknesses so that this program would
make the same mistakes.

All of the graphical routines and display routines are
written in machine language. The rest is entirely
system-rpl. The Fone Manager works on any G or S series
Hp48 up through revision "M".

The Fone Manager is called that because I originally
started it out to be just that. However, it is actually
a database program that can store information of any
type.

Here are a list of the main features this program has
that others don't or that are much better than others:

  * Wonderful user interface that makes the program easy
    to use, not complicated and complex like most others.

  * Lets you use any editor you like. It has automatic
    presets for QED or Stringwriter, but it will also let
    you use any editor you might have. I have never seen
    this option in any other program and to me it is the
    worst aspect of other programs  data entry is too
    slow.

  * Lightning quick display routines. You can hold down
    an arrow key and scroll through a list of fifty names
    in about 11 seconds. This is a display of the entire
    record, not just a one line title.

  * Has a search routine which scans the entirety of each
    record for the search string, not just a specific
    line of each record. This takes under one second to
    scan through a fifty-record list for a string that
    appears in the last record (worst-case). That's
    quick!

  * The find routine has its own quick command line that
    doesn't interfere with the rest of the screen. In
    other words, it doesn't use the ugly HP command line.

  * Uses the small font to display 7 lines of data with
    about 25 characters to a line. This is a lot more
    than other programs which use a bigger font which
    makes you unable to display the last line of your
    address without it wrapping off the screen.

  * Under 3500 bytes!!


Just to see how fast Fone Manager really is, check out
these stats. Below are comparison times of the time it
takes to scroll through every entry in a 56 person fone
list:

Roldx v6.0

23 seconds (highlight-bar mode)
43 seconds (full screen mode)

Fone Manager / Database

12 seconds (full-screen mode)

This package contains the following HP binaries

foneman.lib: the fone manager library

cgeneric: a program to convert other fone-lists to this
          format

croldx: a program to convert roldx format fone-lists to
        this format


Conversion Programs

I have included two programs to convert fone-lists made
with other programs to the format used in this program
which is simply a list of strings. The generic program
goes through a list made by another program and takes out
any strings it finds, putting them into individual
records to be used by this fone-manager. The roldx
converter takes a list made with roldx and converts it to
my format. If your fone-list is already a list of
strings then don't worry, it will work here. Just put
your list on the stack and then run the appropriate
conversion program. Then use the STO command explained
below to store your list into the Fone Manager.


Notes on Inner Workings

Fone Manager stores your fone list out of site in the
Hidden directory. There are also no unsightly parameter
files to get stored in you directories. It uses user
flags 40-42 to keep track of your personal editor. The
Fdata variable, stored in the Hidden directory, is a list
of strings. Each record is stored as a string in this
list.


Commands in the Library

Fone Manager is distributed in library form, taking up
slightly less than 3500 bytes. This library contains
four programs:

  FONE  runs Fone Manager
  RCL   recalls phone list so that you can back it up
  STO   stores a new phone list into the Manager
  DEL   deletes your phone lists from the Hidden
          Directory. This is used to free up space or so
          that you may create a new phone list.
  (simple enough)


Inside the Fone Manager

Fone Manager contains 6 commands:

  ADD    add a record
  EDIT   edit a record
  DEL    delete a record (can also use the DEL key)
  FIND   find a record (search for a string)
  SETUP  choose your editor (QED/other, StringWriter,
           HP48 editor)
  EXIT   exit Fone Manager


ADD:
  This command will let you enter the editor of you
choice and create a new record. This record will be
inserted into the main file in alphabetical order
automatically. The first line of the record determines
the order. You may have as many lines of data as you
wish, however only 7 will show up on the main screen of
Fone Manager. When using the HP48 editor, use
right-shift "." (right-shift period) to go to the next
line. If you press on from the HP48 editor, the record
will be aborted and not saved.

EDIT:
  This command lets you edit the current record you are
on. You will be put into the editor of your choice.
Your record will be re-alphabetized automatically when
you are through editing.

DEL:  
  This deletes the current record from the file. You
will be prompted to make absolutely sure that you want to
delete it. The DEL key on the Hp48 keyboard does the
same thing this command does.

FIND:
  This command enables you to search records for a
string. When pressed, a special miniature command line
comes up in place of the menu labels and you are prompted
to enter the search string. Enter the search string and
press enter. Fone Manager will jump to the first record
and start searching from that point. It searches the
entire record for the search string, not just the first
line. It will search through the records until the
string is found, and then it will make the record
containing the string the new current record. If the
string is not found you will be returned to the record
from which you started the search. Pressing the NXT key
will find the next occurrence of the string after the
record you are currently on.

SETUP:
  This command shows you a screen of information to allow
you to choose the editor to use with Fone Manager. Your
choices are QED, StringWriter, and the Hp48 editor. Pick
the number of the choice you want to use. This setting
will be saved using using user flags 40-42. It will
remain until the calculator is warmstarted or you run
Setup again to change the editor. DO NOT change these
flags yourself. Fone Manager has precautions built in to
handle this, but don't press your luck. If this is a
problem for anyone, let me know and I can change the
flags used.

   When QED is selected as the editor to be used, setup
will look for a variable named "QED.o" before it will let
you select it as your editor. If this variable does not
exist then you will get an error message. This is the
normal name for the QED executable to have. If you have
QED in a library, have the QED.o variable named something
else, or want to use a different editor with Fone
Manager, then put the name of the file to run in the
variable "QED.o". For instance, to use an editor named
FOO, store 'FOO' in "QED.o". Fone Manager runs whatever
is in this file when it goes to an editor. So, putting a
global variable or xlib in this variable will cause it to
execute when QED.o is called. Once this is done, QED can
be selected from the setup menu. If you have the normal
QED installed, everything will be done automatically.

   When StringWriter is selected, Fone Manager looks to
see if library 1303 (StringWriter) is stored in a port.
If not, you will see an error message. Install
StringWriter into your Hp before using SETUP.

   If you select the Hp48 editor, then you will be using
the built-in editor of the Hp48.

EXIT:
  Exits Fone Manager



Hard Key Assignments


arrow keys   scroll through the records of your phone
               list (keys may be held down for
               lightning-quick repeat action)

left-shift  / arrow keys  jump to first or last record
                            depending on which

right shift / arrow keys    arrow key was pressed.
                            (up, right  : last record)
                            (down, left : first record)

DEL  deletes current record. you WILL get an "Are you
       Sure?" prompt.

NXT  searches for next occurence of search string

EVAL  redraws screen if necessary. (Very wide strings
        could possibly mess up the screen border I have
        set up)

ON   leaves Fone Manager

OFF  turns calculator off


**Note:  When you first run Fone Manager, the record you
see will be a help screen telling you the hardkey
assignments. Once you enter a record, however, you will
not see this record again if you use a right/left shifted
arrow to jump to the last record. This record is
actually the last record + 1. If you ever need help
again, jump to the last record and then press the right
or up arrow key. This will advance you the the VERY last
record, the help screen. You could change this record if
you wanted, but it would not be accessible by jumping to
the last record. This record is also not searched when
using FIND. So don't change it, there is no need.

This program is freeware. I don't expect any $ for it,
just the comments of those who enjoy it. Anyone with
suggestions for improvements or just general comments,
may reach me at the following email address:

jeoff@tamsun.tamu.edu

Enjoy Fone Manager and let me hear your comments.

I will be supporting this program, so any comments or
bugs, etc will be fixed ASAP.
@@GPRT       SG
    ͻ
     IMPROVED PRINTING OF OBJECTS ON THE HP 82240A 
                      by Joe Horn                  
    ͼ

 Mini-Instructions: Either (a) Run GPRT alone, for
 normal-width printing, or (b) run ->STW first and then
 GPRT, for full-width printing.

gibbonscr@yvax.byu.edu [Carl Robert Gibbons] writes:

> It [the HP 82240A printer] still won't print most of
> the greek letters, though (except for alpha, beta, and
> mu.)  I wonder if anyone has written a program which
> will print _any_ of the HP48's characters to the
> HP82240A printer. It would have to use the "print
> graphics data" printer commands...

Good idea!  And it works great. Here's my first go at
it.

Ŀ
 GPRT   Graphically PRinT. Works like PR1 but uses
  graphic mode. Handles newline characters
correctly, unlike ->GROB PR1.

Especially useful for printers OTHER than the 82240B,
  e.g. the older 82240A, or Epson & LaserJet printers
  (with the appropriate EPSPRINT or PCLPRINT library
  installed in the HP48).

INPUT: Any object.

OUTPUT: Printer: Object is printed as it would look on
                 the HP48.
        Stack: None (object is dropped, unlike PR1)

Although you could more easily use Brian Maguire's ->GRB
command from his UITL library (GD8), it uses too much
memory to turn a long program into a huge graphic object.

Warning: If you use this to print a program that contains
any object wider than 27 characters, such as a long
string or complex number, the printer will break up the
line in the way wide *graphics* are broken into multiple
sections, since GRPT is printing entirely in graphics
mode.

You could change the two occurrences of 2 ->GROB in the
program to 1 ->GROB, and then objects could be very long,
since they'd be printed in the tiny menu-size font. But
then you'd lose all your lower-case letters, as well as
the ability to read the printout!  Of course, if you
change the two occurrences of 2 ->GROB to 3 ->GROB, then
the results will be larger characters and an equivalent
of double spacing. Although cute, it eats thermal paper.

Matter of fact, being a frugal sort, and hating to waste
thermal paper, I wrote the following program to force the
decompiler to use a line width of 27, which is the most
that the thermal printer can handle. So if you want to
use GPRT to list programs, and if you want to use the
full width of the thermal printer, run the following
->STW ("to string, wide") *first*, and then run GPRT.
Unfortunately, it's in System RPL. Fortunately, it works
on any HP48 version to date.

Ŀ
 ->STW  (called TOSTW on this disk)


INPUT: Any object
OUTPUT: Same as would be obtained from "" +, except
        newlines are inserted to create 27-char lines,
        not the usual 19-char lines.

-Joseph K. Horn-   EQU   akcs.joehorn@hpcvbbs.cv.hp.com
@@INFO48     S-
INFO48, an informator for the HP48sx
by felson_adj@csusys.ctstateu.edu

[For S/SX only; use Memory Browser on G/GX instead]

This is my first attempt at system rpl programming... but
I think it turned out pretty usefull.


function keys:
  up, down arrow        move cursor line
  left shift up, down   move by screenfulls
  right shift up, down  go to first or last line
  alpha                 alphanumeric search
  enter                 for directory, go into it
                        for link, dereference and go there
                        for anything else, call HP editor
  backspace             go back one directory. can only
                          return to directory info48 was
                          started from, (see updir, home)
  leftshift updir       go to parrent of current
  rightshift home       go to root directory

menu commands
  CREAT                 create object, initialy with a
                          null string
  CRDIR                 create dir
    leftshift CRDIR     convert object to a directory
    rightshift CRDIR    convert single item directory to
                          an object
  CRLN                  create link
                          go to target, hit CRLIN menu
                          key or ON/abort to abort
   leftshift CRLN       edit link
  COPY                  copy current object elsewhere...
                          go to destination and hit COPY
                          menukey
   leftCOPY             reverse.... current object
                          receives contents of selected
                          object
  MOVE                  move current object elsewhere...
                          go to other location and hit
                          put/^ to put object above
                          cursorline, or put \v to put
                          object below cursorline.
    left-shift MOVE     get object from elsewhere and put
                          above cursor
    right-shift MOVE    get object from elsewhere and put
                          below cursor
  RENAME                just like it sounds

  { move menu keys on second line }
  SORT                  SORT, thanks to Joe Horn's
                          quicksort, 99% of time spent
                          doing XEQORDER
  EXIT                  not really needed. ON/ABORT does
                          same thing

  reorder operations are really really really slow.
  Please be patient... "REORDERING" message displayed to
  let you know INFO48 hasn't crashed.
@@LASER66    PC
LASER66.COM, a little Laser Printer utility.

Many documents (including SMTK.DOC on this disk!) are
formatted for 66 lines per page. But the HP LaserJet
(and other printers, I suppose) default to 60 lines per
page. It can be changed from the front panel, but that's
a hassle. Just run LASER66 on your PC, and your laser
printer will be set to 66 lines per page until the next
RESET or power down.

Try it:

    LASER66
    TYPE SMTK.DOC > PRN

Ahh, beautiful.    -jkh-
@@MEMU       S-
(Comp.sys.hp48)
Item: 48 by kevin@moon.wustl.edu [Kevin Ruland]
Subj: MEMU now works on rev J's  [but not G/GX]
Date: 19 Feb 1993

The bad pointer that caused the bomb in rev J calcs was
found by Mika. I made the correction and had it tested.
It works now.  It reportedly works on rev D and J calcs
and does not cause warm starts with QED nor [GRAPH].
Thanks for helping me find the problems.

[But time marches on... MEMU crashes the G/GX!  -jkh-]

MEMU - not just another memory program.

Yes, I too wrote a graphic display of memory usage.
Actually I combined the best of MEMVIEW by Dan Kirkland
and the PBYTES by Detlef Mueller. I call it MEMU for
memory usage.  It displays a bar graph representing
system ram useage, including any merged ram cards, as
well as free and used bytes, and a status line for both
ports.  The port status line will display any of "EMPTY",
"size MERGED", "size RAM free", or "size ROM free".  Here
"RAM" and "ROM" indicate both the r/w status and that the
memory is "free".  MEMU is slightly larger that MEMVIEW
(576 bytes compaired to 374), but I find it much more
informative.

I'd be happy to send the source to anyone interested.

Thanks Detlef for making sysRPL enjoyable.

Kevin Ruland
kevin@rodin.wustl.edu
@@PCT.LIB    S-
"PC TOOLS LIBRARY"

Documentations will follow, because I think that hacking
stuff should be provided with some. Anyway, it's seem
they'ra safer than the ones on horn7/FRANCE.

P.C.T : pctools lib, ID 986. Essential if you got a 128
card or two, just manage libs from ports to mem,IO...

Have fun !!!

[To date, no documentation has followed. You are on your
own with this one!  -jkh-]

souiry@ismea.imt-mrs.fr or souiry@147.94.33.1
@@PIM100     SG
(User.programs)
Item: 372 by _nortaneous at hpcvbbs.cv.hp.com
Author: [Jason Christopher Emery]
  Subj: Personal Information Manager
  Keyw: address information data phone
  Date: Tue Mar 24 1992 20:27 
 Lines: 17

Here's a quick, small graphical PIM. (Personal
Information Manager) It's designed to allow for entry of
phone numbers, addresses, names, and brief notes. The
main point to the program is to provide a quick, easy way
to store and retrieve information.

There's a very remote possibility there's still some bug
out there but the again, there always is. A small TXT
file is included in the directory to show some
information on the PIM.

If you ever need to backup data, all you have to do is
copy the DATA variable to wherever you need it. That's
the only place user information is stored. Remember, as
with most programs, only run the intended startup
program(s). Running something else could result in some
big problems. I don't expect anything possibly could
happen, since I've tried it myself, but it could scare
you there for a moment. :-)

Anyways, I hope you can find this useful. That's what
it's here for.
@@RFP        -G
RFP: An HP48G/GX version of RF by Lutz Vieweg.
An object packer. (RFU is the unpacker).
Like PKZIP for the HP48G/GX.

This version is for the G Series. If you have an
HP48S/SX, then use RF as it has appeared on GD5, 7, or 8.

If you want an object packer that works on BOTH the SX
and the GX, then see COMPRESS.LIB above.

RFP shortens RPL programs typically to about 60% of their
size, ML programs about 70-80%, and graphics become
smaller approximately like when you use the
"GraphicObject compresser" published in the past. [Note:
Lutz is referring to PGROB and UPGROB by Erik Bryntse,
available on GD6. -jkh-]

The instructions are rather brief:

RFP . . . compresses an object in level one; if
compression is impossible, the object is left unchanged
on level 1.

RFU . . . uncompresses a string created by RFP

That's the whole thing!

[Note: Do not be alarmed if the display turns off and the
 annunciators blink fitfully while RF is running. RF
 turns the display off on purpose (it can run faster that
 way) and uses the annunciators for scratch memory (which
 also provides you with something to look at while
 waiting). -jkh-]

It's a good idea to put RFU in your HOME directory, so
any program can unpack itself without problems.

Hope to stay in contact,

                          Lutz Vieweg.
@@RFU        -G
RFU, a G/GX version of RFU by Lutz Vieweg.
Unpacks objects packed by RFP; see RFP for complete
details.
@@SCH48v20   SG


                    SCH48 VERSION 2.0
                 A SCHEDULER FOR THE HP48
                  by William J. Levenson

 AUTHOR'S NOTE 

I am very pleased with the way SCH48 has turned out,
thanks to the many valuable suggestions I have received
from users. Version 2.0 should be the last revision,
barring any bugs which, of course, I will fix. It has
been both an enjoyable and educational project and I am
working on a few more. I hope SCH48 proves useful to
you!

 UPDATES 

CHANGES FROM VERSION 1.2:

*  The TakeOver commands that were removed in version 1.2
have been put back. It turns out they are needed if
SCHED is executed from the command line. This should
have only caused the calculator to hang forcing you to do
ON-C (a warm-start) without any memory corruption. No
one complained about this so I guess no one executes
SCHED from the commandline.

*  Repeating alarm capabilities have been added.
Repeating alarms show up on the future days to which they
will be rescheduled. The repeat alarms on future days can
be switched off to improve speed. An "R" in the upper
part of the display is shown in reverse if future repeat
alarms are displayed. The description of the alarm to
the right will have a "(RPT)" added to it if it is a
future position of a repeat alarm.

SCH48 recognizes only repeat intervals greater than one
day. To display repeat alarms with shorter intervals
would be cumbersome and, in my opinion, of little use.

SCH48 can set repeating alarms with repeat intervals that
are an integral number of days. Again, shorter intervals
would be better served by using the built-in HP ALARM
function.

*  Control alarms are now supported and can be edited and
set within SCH48. The prompt is a little different for
setting alarms. For appointment alarms, a string
delimiter (") is required so that the alarm EXEC will be
interpretted as a string. For control alarms, the
argument on the command line must evaluate to a single
object or it will be considered invalid. This can be any
object (e.g. program, list, etc.). The command line will
be evaluated as it would if you were inputting to the
stack so

1 2 3 + +   would store the real number 6 as the alarm
            EXEC

<< 1 2 3 + + >> would store this as a program in the
                alarm EXEC

1 2 3 +     would be invalid because it left two arg's on
            the stack

"1 2 3 + +"  would set an appointment alarm with the
             string as the EXEC

Get it?

*  Marks in the form of one pixel to the right of each
day indicate an alarm set for that day. This display can
be turned off for the sake of speed. A pixel in the
upper part of the display will be shown in reverse if
date marks are on.

*  More key definitions for scrolling and moving months
and years. In general, unshifted and right-shifted arrow
keys move the date cursor; left-shifted arrow keys scroll
the screen; right- shift-OFF turns the calc off;
right-shift NXT moves the time and date cursors to the
current time and date;  +/- key toggles the future
repeating alarm displays;  EEX key toggles whether days
with alarms are marked with a pixel. Other keys behave
the same as before.


CHANGES FROM VERSION 1.1:

All the sys-RPL TakeOver commands were removed from the
key definitions. This results in a savings of over 50
bytes.

I have investigated whether the TakeOver commands are
needed and came to the conclusion they are not for this
application. This change has not given me any problems
but no one has definitively explained the useage of
TakeOver.  If someone has a problem with this or can
think of a possible problem, please let me know. Thanks!

CHANGES FROM VERSION 1.0 (ORIGINAL VERSION):

Two minor bugs were found and fixed. One involved the
STD mode setting on the HP48. In version 1.0, the
calender display was unless STD mode was used. This has
been fixed.

The other bug involved update of the appointments when
keys were quickly pressed. Sometimes, the appointments
would not match the day. Noone seems to have noticed
this, but I did and it is fixed.

Two features were added. A copy function copies an
entire alarm to a different day. This is intended to
compensate for the lack of repeating alarms in SCH48.
Try this option to see if repeating alarms are still
necessary. Let me know...Is this good enough or should I
work on the repeating stuff?  The scanning of repeating
alarms to correctly indicate them on future dates might
slow SCH48 down - how much, I don't know yet.

An edit feature has also been added to allow you to
change the alarm text without deleting and resetting. I
found this handy.

 DESCRIPTION 

SCH48 is a library written entirely in system RPL and ML
which allows the HP48 to function as an electronic
"DAYTIMER". The intent is to replace the "ALARMS" catalog
in the HP48 for a more useful and intuitive
representation of appointments, events or blocks of time.

SCH48 uses the existing ALARM functions built into the
HP48. BUT...the user interface is improved (I hope). The
SCH48 library contains two commands, D->CAL and SCHED.

D->CAL merely takes a date from the stack and displays
the calender for that month. The stack diagram is:

      ( date  )

where "date" is in MM.DDYYYY or DD.MMYYYY format,
depending on the HP48 setting. If YYYY is omitted, the
current year is assumed. If a whole real number is
input, it is interpreted as the month of the current
year.

SCHED is the primary function of the library. When this
command is executed, a calender is displayed with the
current day highlighted. To the right of the calender is
a listing of the current ALARMs that are scheduled for
the day. These alarms can be entered as a single point
in time or as a block of time. The time or block of time
is reflected in the listing of alarms. Below the
calender is a 24 hour time-line which shows the times of
the listed alarms blacked out. In this way, you can see
graphically, how much of your day has been scheduled.

I have attempted to present as much data as possible on a
single screen for quick viewing, but the alarm text
listings may extend beyond the window. Scrolling is
provided for this.

Once the SCHED is started, it is fairly
self-explainatory. Alarms can be set, deleted (and
acknowledged), moved, and edited. I have tried to make
the functional keys intuitive.

I thought about adding a help function but it seemed to
be a waste of memory, so I'll leave it to you to read the
documentation.

 KEY DEFINITIONS 


NO SHIFT KEYS:


KEY            DEFINITION

{A}             Scroll the screen fully to the left
                (JUMPLEFT)

{F}             scroll the screen fully to the right
                (JUMPRIGHT)

{up arrow}
{down arrow}
{left arrow}
{right arrow}   Move the date cursor on the calender

{NXT}           Go to the next alarm

{ENTER}         Set the alarm - the user will be prompted
                for the alarm text. If a time has been
                marked (see {*} key), a block of time
                will be set; if not, a single time will
                be set. ATTN at the prompt will erase the
                contents of the command line if it is
                present. ATTN without a commandline,
                aborts the setting of the alarm. ENTER
                enters the alarm text.

{DEL}           Deletes the alarm if the time cursor is
                pointing at an alarm block on the
                timeline. If the time cursor is not
                pointing at an alarm, a error beep will
                be generated.

{LEFT-SHIFT}    Activates left shift mode

{RIGHT-SHIFT}   Activates right shift mode

{*}             (This is the "multiply" key) sets one end
                of a block of time on the time-line.
                {ENTER} determines the other end of the
                block of time.

{-}             Moves the time cursor 15 minutes to the
                left (hold down for repeat)

{+}             Moves the time cursor 15 minutes to the
                right (hold down for repeat)

{+/-}           Toggle the display of future repeat
                alarms

{EEX}           Toggle the display of marks on days with
                alarms

ATTN            Ends SCHED



LEFT SHIFT KEYS:                                               


KEY            DEFINITION

{up arrow}
{down arrow}    Scrolls the screen up and down. This is
                necessary if a lot of alarms are set on a 
                single day (the listing may extend beyond 
                the bottom of the screen). Hold the key
                down to continue scrolling.

{right arrow}
{left arrow}    Scrolls the screen left and right. Hold
                the key down to continue scrolling.

{PREV}          Go to the previous alarm

{LEFT-SHIFT}    Disables left shift mode

{RIGHT-SHIFT}   Activates right shift mode

{-}             Moves the time cursor 1 minutes to the
                left (hold down for repeat)

{+}             Moves the time cursor 1 minutes to the
                right (hold down for repeat)

{EDIT}          Edits the EXEC of the alarm that the time
                cursor is pointing to. ATTN at the prompt
                will erase the contents of the command
                line if it is present. ATTN without a
                commandline deletes the alarm. If you
                enter the EDIT function, and change your
                mind, ENTER will reset the alarm with the
                text indicated. Or, you can attention
                out of the EDIT and reset the alarm with
                the {LEFT SHIFT - ENTER} function.
                CONTROL alarms cannot be edited this way.
                If you accidentally try to edit a CONTROL
                alarm, ATTN out of the EDIT and reset the
                alarm using {LEFT SHIFT - ENTER}.

{ENTER}         Copies the alarm from the last DEL, NXT,
                PREV EDIT, or ENTER command to the
                current day. Use this feature to move,
                copy (repeat), an alarm by using one of
                the above commands to indicate the alarm
                of interest, move to a different day and
                set the alarm with the same time block
                and EXEC on that day. CONTROL alarms can
                use this too.


RIGHT SHIFT KEYS:                                               


KEY            DEFINITION

{up arrow}
{down arrow}    Move the date cursor 4 weeks at a time

{left arrow}
{right arrow}   Move the date cursor 1 year at a time

{LEFT-SHIFT}    Activates left shift mode

{RIGHT-SHIFT}   Disables right shift mode

{NXT}           Move time and date cursors to the current
                time and date

{-}             Moves the time cursor 1 hour to the left
                (hold down for repeat)

{+}             Moves the time cursor 1 hour to the right
                (hold down for repeat)

{OFF}           Turn calculator off

 FEATURES, LIMITATIONS, AND BUGS??? 

An alarm can be moved by first deleting it. The alarm
text is copied and will be the default the next time an
alarm is set. Use this method if the time needs to be
adjusted. If you only want to change the day, use {LEFT
SHIFT - ENTER}

An alarm can be copied by going to it by means of {NXT}
or {PREV}. Again, the text will be copied and offered as
a default the next time an alarm is set. Again, if only
the day is to be changed, use {LEFT SHIFT - ENTER}

To delete an alarm, move the cursor to the alarm block or
use {NXT} or {PREV} and press {DEL}.

An alarm may not show up on the time-line of it is a
block alarm which spans less than 7 minutes. It cannot
be edited or removed in SCH48 either. I didn't think
this was much of a limitation, but if you don't like it,
I can fix it.

CONTROL ALARMS can now be set using SCHED. Any alarm
EXEC that is not a string is set as a control alarm, just
as the HP internal alarms work. The alarm EXEC must be a
single object. The input line is treated just as the
command line is treated when in the stack display. If
more that one object result from the input line contents,
an invalid EXEC error will occur and you will be prompted
to alter the input. In most cases, the EXEC will be
either a string, which must be surrounded by double
quotes, or as a program which must be surrounded by <<
>>. The default prompt starts with  two double quotes so
that appointment alarms can be input easily. Remember,
if you start over with ATTN to erase the input line of an
appointment alarm, you must add a double quote mark.

REPEAT alarms with repeat intervals that are an integral
number of days can also now be set in SCHED. To do this,
you must use the * (or multiply key) to mark the day to
set the repeating alarm on (this also sets the endpoint
of the alarm span but if the time cursor is not moved,
the time span will be zero). Now, move to the day you
wish to have the first repeat alarm appear and press
ENTER (you can also move backwards the number of days you
wish the time interval to be).

The copy function is still available using
left-shift-ENTER if you prefer that over the repeat
alarms.

SCHED should operate correctly with any HP48 time/date
settings. I primarily use a 24 hour clock and MM.DDYYYY
settings and haven't experienced any problems.

Alarms not set from inside SCHED should work fine with
the following exception. In order to set block times,
the alarm time is set with the "begin" time as the time
of the alarm. The end time is indicated by the fractional
seconds of the alarm time. That's not clear, how about
an example:

      An alarm from 8:15 a.m. to 11:45 a.m. is set with
      an alarm time = 08.15001145

If an alarm is created with arbitrary fractional seconds,
the time-line may end up looking a little strange but no
damage will be done.

This carries with it another minor limitation that the
end time of the alarm will be rounded to the nearest 5
minute interval. This is necessary because of accuracy
problems with those fractional seconds (trust me). I may
be able to fix this if enough of you wish it.

Past due alarms will be acknowledged when they are
deleted from within SCHED. The alarms will behave just
like the HP48 handbook describes for appointment alarms.
If you don't want the beeper going off, set flag -57.

The display of marks on the days with alarms can slow
SCH48 quite a bit when moving from month to month. Also,
the display of future repeating alarms can slow things.
For instance, if you have a repeating alarm with an
interval of one day, every day will have a mark by it
indicating that this repeating alarm will show up each
day. If you want the marks but don't want the future
repeat alarms, hit the +/- key to toggle this function.
Then, only the original alarms will be shown with marks
by the day and on the right side of the screen where the
current days alarms are listed. If you don't marks at
all (a lot of alarms will also slow things down a bit),
then toggle this function using the EEX key. Both
function are indicated in the upper part of the screen
with an inverse "R" for the repeat function and an
inverse single pixel for the mark function. If these are
not shown in reverse, then they are off.

The start up state of the mark and repeat functions is
set by the system flag -43 (reschedule unacknowledged
repeating alarms - if set, alarms are not rescheduled)
and system flag -59 (fast catalog display - set and the
marks on the dates are not initially shown). So if you
don't use repeating alarms, things will be a little
faster in SCH48 if you set flag -43. And if you don't
want the marks, set flag -59. If these functions are
toggled from withing SCH48, the system flags will be
unaffected.

 CREDITS 

SCH48 was written in system RPL and ML using the
excellent RPL48 package written by Detlef Mueller and
Raymond Hellstern.

The SCH48 library was created using <-LIB->, again by
Detlef Mueller, Raymond Hellstern, Rick Grevelle.

THANKS to all of you for a tremendous contribution to the
HP48 world!!

Thanks also to HP for the RPL TOOLS and, especially, the
RPLMAN documentation. And, of course, thanks to HP for
such a versatile calculator.

Thanks to Mika Heiskanen and other contributors to the
entries lists that were posted at seq.uncwil.edu.

Thanks to Jan Brittenson, whose MLDL was a great help.

Thanks to Chris Spell for his tireless maintainance of
comp.sources.hp48 and the archives.

And thanks to all the helpful 48'ers who helped me get
this far. I hope this will be a useful partial payback
with, hopefully, more to come.

 DISCLAIMER 

I have not had any problems with SCH48 while using it on
my HP48-D but...It does contain some unsupported entry
points. Although they have appeared on several of the
"entries" lists, that doesn't guarantee that they will
work the same on other revisions of the HP48. With that
in mind...Have fun SCHeduling and certainly let me know
of any problems!


 COPYRIGHT NOTICE 

    Copyright (c), 1992, W.J. Levenson.
    Permission to copy this article is granted provided
    that the copies are not made or distributed for
    resale (excepting nominal copying fees). Other
    permissions can be arranged by contacting W.J.
    Levenson via email at the following address:
    akcs.levenson@hpcvbbs.cv.hp.com

    or by U.S. Mail at

    12558 Caminito Mira Del Mar
    San Diego, CA  92130
    USA

    SCH48 is distributed in the hope that it will be
    useful, but WITHOUT *ANY* WARRANTY.

    This software is LET-ME-KNOW-WARE. Please let me
    know if you like it or not and any improvements you
    would like to see. But MONEY will be accepted in lieu
    of the above!!

 INSTALLATION 

    To install SCH48, a) download the ASC version,
    execute ASC->, or b) download the uudecoded version
    and recall it into the stack. Purge the variable
    which contains the orginal copy. Enter the port
    number (0,1,2) where you want to store SCH48 and
    press STO. Switch the HP48 off, then on again. SCH48
    will now be installed.


SIZE = 4854.5 bytes
HP48 CHECKSUM = # D4FBh
@@SMTK       S-
SmartKeys version 1.59 by Simone Rapisarda.
Upgrade from version 1.23 which was on GD7.
This brief description written by Joe Horn.

For S/SX only.  G/GX version is not yet available.

Facilitates the creation, management, and deletion of
system-level key assignments and menus. Allows multiple
custom menus.  This is one of the libraries that is
ALWAYS in my HP48 SX, it's so useful.

The complete documentation is over 70K, and formatted to
66 lines per page (see LASER66 above), with table of
contents.  It's too big to fit in this DOC viewer.  If
you go into the UTILS subdirectory on this disk, and copy
the SMTK.EXE program onto your hard disk and run it
there, it'll create the document.  Then you can view or
print it with the LIST.COM program, also on this disk.
@@TELE32     SG
                ͻ
                 TELEPHONE LIBRARY V3.2 
                      By David Bal      
                         9/1/93         
                ͼ

      ***  THIS PROGRAM WILL WORK ON THE HP48.GX **
 
       This is another telephone library. It is a menu
driven program that stores the data file as a backup
object in any port you choose. This allows the user to
keep the original 30k of RAM free of misc. files. One
draw back from this format is that the program requires
about two times the size of the data file ($TELE) in free
RAM to run. This means that if your data file is 5K long
you need >10k to fully use the library. The library will
run all applications at lower memory levels but editing,
adding, or purging from the data file will not be
possible.

I. Downloading the library

     1.  Run KERMIT on your PC and connect the calculator
     2.  Type SET PORT 1(or what ever port)
     3.  Type SET BAUD 9600
     4.  Put your calculator in KERMIT SERVER mode by
         pressing right-shift PRG on the S/SX, or
         right-shift right-arrow on the G/GX.
     5.  Send the library by typing SEND TELE.LIB
     6.  After a few seconds the transfer will be
         complete
     7.  Using the BYTES command check if the library is
         4473 bytes with a checksum of # 5D05h

II.  Starting the library
     
     1.  After downloading recall 'TELE.LIB'. Your stack
         should Show 1: Library 1103:  TEL...  Type 0 STO
         to store it into port 0.
     2.  After storing the library in port 0 you can
         erase the other copy by typing 'TELE.LIB' PURGE.
     3.  Now shut the calculator off and turn it on.
     4.  The library will self-attach.
     5.  Press LIBRARY and TELE should appear named
         "TELE V3.2 (c)93 David Bal"
     6.  The only command in the library is TELE which
         activates the telephone directory.

III. Creating a storage variable (named $TELE)
     
     1.  After activating the telephone directory the
         main menu should appear like:

                              TELEPHONE DIRECTORY
                          ->Browse All
                            Add New Person
                            Search By Last Name
                            Search By First Name
                            Search By Phone Numb..
                            Search By Street Add...
                                                    EXIT

     2.  If you have never added anyone to the data list
         you will need to create a data file. By
         pressing enter from the main menu (it does not
         matter which element the arrow is pointing to)
         you will be asked where you want the empty data
         file to be stored. All available ports
         (0,1,2)will be options. Press 0 for port 0
         (most people will do this) 1 for port 1 and so
         on.

IV   Active Keys

     1.  The up-arrow and down-arrow will move the
         pointer up or down one element.
     2.  Left-shift up or down arrow will move the
         pointer up or down six elements respectively (if
         the list size if < 12 The pointer will move to
         the top or bottom if the list.)
     3.  Right-shift up or down arrow will move the
         pointer to the top and bottom of the list
         respectively.
     4.  ENTER and [right-shift] [+/-] will view the
         current item.
     5.  ON will exit the program in all cases except
         when viewing an item.

V    Adding a new person to the list

     1.  There are two ways to add a new person. Adding
         from the main menu or adding from a browse
         screen by pressing NEW.
     2.  The input cursor is on alpha-lock.
     3.  After imputing the eight elements. Any or all
         can be left blank. The new file will be
         displayed as if being viewed. If it is
         acceptable press ENTER. If you wish to edit
         press any other key (ATTN will do). The same
         eight input questions will be asked with your
         old input already there.

VI.  Browsing All

     1.  After choosing browse all your entire list of
         names will be put onto the browser. If you have
         no files it will tell you so.
     2.  Six new hot keys will appear. EDIT, NEW, PURG,
         ->STK, PRINT, and UP.
     3.  EDIT will edit the file and replace the old one
         with your new one. This is just like Adding a
         new person.
     4.  NEW will add a new person
     5.  PURG will ask you if you really want to delete
         the person. Press [ENTER] to delete. Any other
         key to abort.
     6.  ->STK will ask you "SEND WHAT?" press ALL or
         ONE. If you press ALL the entire list will be
         sent to the stack displaying the % complete.
     7.  PRINT is much like ->STK. By pressing ONE will
         print the person at the pointer. ALL will print
         the entire list displaying the % complete.
     8.  UP will move you to the main menu.
       
VII. Searching

     1.  When searching for a particular string the
         program looks for any element that has the same
         beginning characters.

          EX.
               Search By First Name
               First Name


               Je
          The program will find all people whose first
          names begin with "Je". "Jen", "Jennifer", even
          "Jeneseque" will be accepted. This current
          version does not except wild card characters.
          The program is caps sensitive.

     2.  While the program is searching the number found
         will be displayed along with the % complete. If
         you are satisfied with the # found you can press
         ATTN to abort further searching and browse the
         ones found. For example if you are searching
         for "Fred" and know that you only have one
         "Fred" and the program has displayed "1 found"
         you can press ATTN and browse the one found. The
         searching program searches in reverse
         alphabetical order (from Z to A).

VIII.Last Words

     I, David Bal, express no warranty for this program.
Even though I have thoroughly tested the program it might
contain a devastating bug. Always keep a current backup
of all memory before testing it.
 
  This program is released as FREEWARE.

David Bal

Smail:
514 SW 34th St #17
Gainesville, FL 32607

Email: yoda@ufcc.ufl.edu or yoda@hpcvbbs.cv.hp.com
@@TIMEKEEP   SG
(Comp.sys.handhelds)
Item: 532 by edp at deland.enet.dec.com
Author: [Eric Postpischil]
  Date: Sun Jul 01 1990

[Note: The HP48's clock isn't terribly accurate. So HP
 wrote a program called 'CLK' (on Goodies Disk #8) which
 "kicks" the clock every so often to correct for the
 clock's drift. But 'CLK' is 2K in size and a tad
 unwieldy to use. So Eric wrote a better clock adjuster.
 -jkh-]

Here's a set of timekeeping routines that compensate for
inaccuracy in the 48's clock. (They could also be used
to keep sidereal time.)

In a list called CLKDAT (clock data), there are, in
order:

          o The value of TICKS at the start of some
            reference period.

          o The cumulative number of ticks added to the
            clock since then.

          o The difference between true time and clock
            time as a fraction of the number of elapsed
            clock ticks (called "accuracy factor").

The following routines are provided:

KICK      Called with no arguments to update the clock by
          the correct number of ticks.

ADJT      Called with a unit object specifying an amount
          of time by which to change the time zone or
          system. E.g., call ADJT with -1_h on the stack
          to change from Daylight Savings to Standard
          Time.

ADJC      Called to adjust the clock by a specified
          number of ticks. Once the clock is set exactly
          with ADJC, EXACT should be called or the data
          will be lost when KICK is next called.

EXACT     Uses the cumulative number of ticks added to
          the clock, by KICK and by ADJC, to compute a
          new accuracy factor.

SCHEDULE
          Schedules an alarm at 4 a.m. to call KICK
          daily.

CANCEL
          Cancels the alarm.

RESET     Set a new reference time and discard cumulative
          ticks added. Keep the old accuracy factor until
          a new one is computed.

To use these timekeeping routines:

          o Set the time with the built-in functions.
          o Make the clock as exact as desired with
            CLKADJ.
          o Execute RESET (no arguments).
          o After using RESET, do not use the built-in
            time adjustment commands.
          o Let time pass.
          o Make the clock as exact as desired with ADJC.
            (ADJC takes as an argument a number of ticks,
            just as CLKADJ does.)
          o Execute EXACT.
          o Execute SCHEDULE.

Every night at 4 a.m., KICK will update the clock.

After the initial setting, you can update the accuracy
factor by again adjusting the clock with ADJC and
executing EXACT. If your calculator's environment
changes, you can establish a new reference time by making
the clock exact and executing RESET. This keeps the
current accuracy factor but resets the reference time, so
the next execution of EXACT will base the new accuracy
factor on the time elapsed since RESET.

To change time zones or systems, use ADJT.

o If you call ADJC by accident, call KICK to correct it.

o If you call ADJT by accident, call it again with the
  negation of the argument.

o If you call EXACT by accident, you are out of luck
  unless you have another copy of your accuracy factor.
  If so, replace it in CLKDAT.

KICK makes the clock correct by computing the number of
ticks to add to the clock to make it correct now:

(accuracy factor)*(TICKS - reference time - added ticks)
    - added ticks

Because this calculation is used rather than simply
adding a fixed number of ticks at regular intervals, KICK
can be called at any time, at frequent or infrequent
intervals. Updating the clock daily keeps it close to
the correct time. You can change the time of the alarm
and the repeat interval in the SCHEDULE routine. (Be
sure not to set a time that is skipped over. E.g., if you
set the KICK alarm for 3 a.m. and also have an alarm that
adds 1 hour to the clock at 2 a.m. for the change to
Daylight Savings Time, then the clock will go from
slightly after 2 a.m. to slightly after 3 a.m., and the
KICK alarm will not be executed or scheduled for the next
day.)

SCHEDULE uses AO (alarm object) as the object for the
alarm to execute. This object discards its argument,
gets the current path, executes an object called JOB,
restores the current path, and turns the calculator off.
If an error occurs, the error message is left in the
stack before shutting the calculator off. If a variable
called JOB does not exist when SCHEDULE is executed, it
is created as a list specifying the current directory and
the KICK program. If you would like to add additional
routines to be executed, add them to the list in JOB.
JOB is created in the home directory but can be moved to
any port. If you need to make more complicated changes,
like removing the call to OFF, execute CANCEL, change the
AO variable, and call SCHEDULE.

KICK can be modified to adjust the clock so that it will
be correct at some time in the future. E.g., you could
arrange it so that KICK runs at 4 a.m. and adds the
number of ticks needed to make the clock correct at 4
p.m. By doing this, the clock is early part of the day
and late part of the day, instead of only early or only
late. This cuts in half the frequency with which KICK
must be executed to keep the clock within a specified
distance of the correct time.

To make this modification to KICK, add the number of
ticks to the number in stack level one just after the
call to PA. For example, to adjust KICK to prepare the
clock to be correct in 12 hours, put

          353894400 +

after the call to PA in KICK.
@@TOSTW      SG
TOSTW ( ->STW ) "To String, Wide"  by Joe Horn

Same as "" +, but inserts newlines at wider positions,
especially useful with the HP 82240 thermal printer.

Intended for use with GPRT. See GPRT above for full
documentation.
@@XYMODEM2   S-
(Comp.sys.hp48)
Item: 1841 by alou@elde1.epfl.ch [Maurice Alou]
          and westphal@elde.epfl.ch [Edouard Westphal]
Subj: X&Y Modem v2.2 for Hp48S/SX
Date: 05 Oct 1992

[For S/SX only; XMODEM is already built into the G/GX]


                 X&Y Modem v2.2 for HP48


[Note: This obsoletes the XYMODEM.LIB on Goodies Disk #7.
-jkh-]

CHANGE FROM v2.0 :
-The bug in ERRSET/ERRTRAP has been fixed.
-The XLIB names have changed ! sorry.

CHANGE FROM v2.1 :
-The bug concerning the IOPAR has been fixed. [Namely,
 now you don't need to worry about IOPAR at all. -jkh-]

-The program checks battery level before beginning the
 communication.


SETUPXYM : 
  CRC  : toggle flag 57. If flag is true then CRC else
         CHK. Used only with XModem in reception (CRC is
         automaticaly choosen with YModem)
  REPL : toggle flag -36 (see manual)
  EXIT : do a lastmenu

SENDM :
  Send with X or Ymodem depending on the first stack
  object :

  1: global_name/local_name  -> 1: list       uses Ymodem
     Equivalent to SEND Kermit command
     example: 'ABC'

  1: :IO:name                -> 1: list       uses Ymodem
     Equivalent to ARCHIVE
     example: :IO:Sep3

  1: :port#:name             -> 1: list       uses Ymodem
     send a library or a Backup object
     example: i/  :0:1275    
              ii/ :&:ABC

  1: list                    -> 1: list       uses Ymodem
     send one or more objects listed above
     example: { :IO:Sep3 :0:1275 :0:1092 FFT }

  1: any                     ->               uses Xmodem
     if the object isn't of a type listed above, it will
     be sent with XModem protocol (see remark below).

  The output list contains the unsent objects (the files
  not found in the current path).

RECX :
  Receive with XModem protocol. Flag 57 specify CRC or
  CHK. This command is usefull to receive a library on
  stack.

                             -> 1: object

RECY :
  Receive one or more files with YModem protocol. This
  command is equivalent to the RECV command of Kermit.

                             -> 


REMARKS:

(1)
Sending an object from the HP48 to a PC with Xmodem
protocol (not Ymodem protocol) is not a good idea: this
object cannot be received from HP48 with the standard
RECV Kermit command. Why? Because Xmodem doesn't send the
file header which contains the size in bytes of the
object. This information is used by Kermit's RECV command
to check if the file has been corrupted. So a file sent
with Xmodem can be received only with Xmodem and Ymodem,
not Kermit.

In conclusion:
- a file sent with Ymodem is safe: you can receive it
  later with Kermit, Xmodem and Ymodem protocol.

- a file sent with Xmodem is not safe: you can receive it
  with only Xmodem and Ymodem protocol.

(2)
X&Ymodem automatically selects the serial port for the
communication, and transfers are made in binary mode. So
flags -33 and -35 have no effect. You can choose the
speed (9600, 4800, 2400, 1200) in the SETUP submenu of
the IO menu.

(3)
You must set the size of a block to 128 bytes (short
block) in the configuration of your comunication program
in your PC.


KNOWN BUG :
None.


CREDITS:
  Hewlett-Packard for their Tools.
  Alonzo Gariepy for his Saturn Processor Notes.
  Jan Brittenson for his Star and his MLDL library.
  Detlef Mueller, Raymond Hellstern and Rick Grevelle for
    their Library constructor.
  Chuck Forsberg for his notes on the protocols XModem
    and YModem.
  And to all people who gave us a lot information about
    Hp28, 48 on mail, news and FTP-server.

Maurice Alou & Edouard Westphal

alou@elde.epfl.ch
westphal@elde.epfl.ch
   

          Do a backup with the standard ARCHIVE
                before using the library!


Library name : X-Y Modem v2.2
Library ID   : 1275
Size         : 3550
Chk          : # 65E9h

[Note: Despite their warnings, I've never had the XYMODEM
 library cause me any grief, except that Ymodem sometimes
 seems to fail for no apparent reason. I use this
 library on all but the smallest files. -jkh-]
